package leecode.数组和字符串.翻转字符串里的单词;

import java.util.*;

public class reverseWords {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        String s = "             i love you      ";
        Soulution soulution = new Soulution();
        String s1 = soulution.reverseWords(s);
        System.out.println(s1);
//        Soulution2 soulution2 = new Soulution2();
//        soulution2.reverseWords(s);
//        System.out.println(s);
        long endTime = System.currentTimeMillis(); //获取结束时间
        System.out.println("程序运行时间： " + (endTime - startTime) + "ms");
    }

    //方法一 自己写方法
    static class Soulution {
        public String reverseWords(String s) {
            ArrayList<String> strings = new ArrayList<>();
            String result = "";
            boolean flog = false; //判断一个单词的开始和结束
            int length = s.length();
            StringBuilder one = new StringBuilder();
            if (s.length() == 0) {
                return result = "";
            }
            if (s.length() == 1 && s.charAt(0) != 32) {
                return s;
            }
            for (int i = 0; i < length; i++) {
                char c = s.charAt(i);
                if (c != 32) {
                    flog = true;
                } else {
                    flog = false;
                    one = new StringBuilder();
                }

                if (flog) {              //如果遍历到字母开始拼接
                    one.append(c);
                }
                if (c != 32 && i == length - 1) { //为了防止字母结尾导致 i+1 溢出 故单独在此处做个处理
                    strings.add(one + "");
                }
                if (i < length - 2 && c != 32 && s.charAt(i + 1) == 32) { //第一个到最后一个单词存入List中
                    strings.add((one + ""));
                }

            }
            if (strings.size() == 1) {
                return String.valueOf(strings);
            }
            Collections.reverse(strings);   //反转元素
            result = String.valueOf(strings);

            String s1 = result.replaceAll(",", "");
            String s2 = s1.replaceAll("]", "");
            return s2.replaceAll("\\[", "");

        }
    }

    //方法二，使用java提供的方法
    static class Soulution2 {
        public String reverseWords(String s) {
            //除去开头和末尾的空白字符
            s = s.trim();
            //正则匹配连续的空白字符作为分割符分割
            List<String> strings = Arrays.asList(s.split("\\s+"));
            Collections.reverse(strings);
            return String.join(" ", strings);

        }
    }


}
